package gla.centralhotel.business.interfaces;

import gla.centralhotel.exception.CollectionRetrieverException;
import gla.centralhotel.model.Agency;
import gla.centralhotel.model.Country;
import gla.centralhotel.model.Customer;
import gla.centralhotel.model.Hotel;
import gla.centralhotel.model.Manager;
import gla.centralhotel.model.Price;
import gla.centralhotel.model.Room;
import gla.centralhotel.model.RoomBooking;
import gla.centralhotel.model.RoomType;
import gla.centralhotel.model.Zipcode;
import java.util.ArrayList;
import javax.ejb.Local;

/**
 *
 * @author loicpark
 */
@Local
public interface IResourceBrowser {

    public ArrayList<RoomType> getAllRoomType();

    ArrayList<Zipcode> getAllZipcode();

    ArrayList<Country> getAllCountry();

    /**
     * Recupere une arrayList de reservation pour un customer
     * @param customer
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<RoomBooking> getAllRoomBookingByCustomer(Customer customer) throws CollectionRetrieverException;

    /**
     * Récupère tous les hotels d'un manager
     * @param manager
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<Hotel> getAllHotelByManager(Manager manager) throws CollectionRetrieverException;

    /**
     * Recupere toutes les chambres d'un type
     * @param hotel
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<Room> getAllRoomByType(RoomType type) throws CollectionRetrieverException;

    /**
     * Recupere toutes les chambres d'un hotel
     * @param hotel
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<Room> getAllRoomByHotel(Hotel hotel) throws CollectionRetrieverException;

    /**
     * Permet de recuperer une collection de manager d'hotel en passant en parametre
     * un country
     * @param country
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<Manager> getAllManagerByCountry(Country country) throws CollectionRetrieverException;

    /**
     * Permet de recuperer une collection de manager d'hotel en passant en parametre
     * un zipcode
     * @param zipcode
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<Manager> getAllManagerByZipcode(Zipcode zipcode) throws CollectionRetrieverException;

    /**
     * Permet de recuperer une collection de manager d'hotel en passant en parametre
     * un room
     * @param room
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<Price> getAllPriceByRoom(Room room) throws CollectionRetrieverException;
    
    public ArrayList<Price> getAllPrice();

    /**
     * Recupere une arrayList de reservation pour une agance
     * @param agency
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public ArrayList<RoomBooking> getAllRoomBookingByAgency(Agency agency) throws CollectionRetrieverException;

    /**
     * Recupere une arrayList de reservation pour un hotel
     * @param hotel
     * @return
     * @throws gla.centralhotel.exception.CollectionRetrieverException
     */
    public java.util.ArrayList<gla.centralhotel.model.RoomBooking> getAllRoomBookingByHotel(gla.centralhotel.model.Hotel hotel) throws gla.centralhotel.exception.CollectionRetrieverException;
}
